package com.sxt.pro.rabbitmq;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

/**  

* @Description: 生产者本地模拟

* @author xinxiaokang  

* @date 2020年8月26日 下午2:47:56

*/
public class Producer {
	//队列
	private static final String QUEUE = "helloworld"; 
	
	public static void main(String[] args) {
		//通过工厂创建新的连接和mq建立连接
		ConnectionFactory factory = new ConnectionFactory();
		factory.setHost("127.0.0.1");  //地址
		factory.setPort(5672);         //端口
		factory.setUsername("guest");  //用户名
		factory.setPassword("guest");  //密码
		//设置虚拟机，一个mq服务可以设置多个虚拟机，每个虚拟机就相当于一个独立的mq
		factory.setVirtualHost("/");
		//建立连接
		Connection connetion = null;
		Channel channel =null;
		try {
			connetion = factory.newConnection();
			//创建会话通道:生产者和mq服务所有通讯都在此完成
			 channel = connetion.createChannel(); 
			/**
			 * 声明队列：如果队列没有，则创建
			 * 参数：
			 * 1、队列名称
			 * 2、是否持久化，如果持久化，mq重启后队列还在
			 * 3、是否独占连接，
			 * 4、自动删除 
			 */
			channel.queueDeclare(QUEUE,true,false,false,null);
			/**
			 * 发送消息
			 * 参数
			 * 1、exchange：交换机 不指定 默认交换机""
			 * 2、routingKey：交换机根据key来讲消息推送指定队列，如果默认交换机，routingKey为队列名称
			 * 3、props：消息的属性
			 * 4、body: 消息内容
			 */
			String message = "hello world 辛孝康  加油！";
			
			channel.basicPublish("", QUEUE, null,message.getBytes());
			System.out.println("send to mq:"+ message);
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			//关闭连接关闭通道
			try {
				channel.close();
			} catch (IOException e) {
				e.printStackTrace();
			} catch (TimeoutException e) {
				e.printStackTrace();
			}
			try {
				connetion.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
}
